[iOS 8] Core Location の新機能「CLFloor」と「CLVisit」
CLFloor と CLVisit
iOS 8 から、Core Location で CLFloor と CLVisit が利用できるようになりました。本記事ではこの2つの機能の使いかたを解説したいと思います。
CLFloor
CLFloor は階情報のクラスです。現在地の建物の何階に居るかという情報を取ることができます。なお M8 モーションコプロセッサ搭載デバイス (iPhone 6 / iPhone 6 Plus) で利用できます。
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { println("\(locations)") // 初めに取得できた位置情報のフロアを取得する let location: CLLocation? = locations.first as? CLLocation if let floor = location?.floor { println("Current Floor: \(floor)") } else { println("Floor is nil") } }
CLFloor は CLLocation#floor プロパティから取得します。利用不可の場合は nil が渡されます。
CLVisit
CLVisit は滞在情報のクラスです。現在地にどのくらい滞在したかという情報を取ることができます。Visit Monitoring と呼ばれている機能です。
import UIKit import CoreLocation @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate { var manager: CLLocationManager! // MARK: - UIApplicationDelegate func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { manager = CLLocationManager() manager.delegate = self; manager.requestWhenInUseAuthorization() return true } // MARK: - CLLocationManagerDelegate func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) { switch status { case .Authorized, .AuthorizedWhenInUse: println("位置情報利用可") // 滞在情報の取得を開始する manager.startMonitoringVisits() default: println("位置情報利用不可") } } func locationManager(manager: CLLocationManager!, didVisit visit: CLVisit!) { println("現在地 : \(visit.coordinate)") println("Accuracy : \(visit.horizontalAccuracy)") println("到着時間 : \(visit.arrivalDate)") println("出発時間 : \(visit.departureDate)") } }
滞在情報のモニタリングは CLLocationManager#startMonitoringVisits で開始します。滞在情報が取得できたときに CLLocationManagerDelegate#locationManager:didVisit が呼び出され、CLVisit オブジェクトが渡されます。位置情報と Accuracy、到着時間と出発時間を取得することができます。
まとめ
いずれも便利そうな機能ですね!既存の位置情報を使っているアプリの機能増強はもちろん、いままでにない全く新しいアプリも作れそうですね。